package optymalizacjaSkladowania;

import skladowisko.Kontener;
import skladowisko.Pole;
import skladowisko.Skladowisko;
import skladowisko.Terminal;

/**
 *
 * @author Krzysiek
 */
public class PierwszeWolneAnalitykSkladowania extends ProstyAnalitykSkladowania
{

    private Skladowisko aktualneSkladowisko = null;
    private int numer = 0;

    public PierwszeWolneAnalitykSkladowania(Terminal t)
    {
        super(t);
    }

    public PierwszeWolneAnalitykSkladowania()
    {
    }

    @Override
    protected boolean przydzielMiejsceKontenerowi(Kontener k, PropozycjaPrzydzialow propozycja)
    {
        if (aktualneSkladowisko == null)
        {
            aktualneSkladowisko = terminal.getSkladowiska().get(numer);
        }

        Pole pole;
        for (int s = numer; s < terminal.getSkladowiska().size(); s++)
        {
            numer = s;
            aktualneSkladowisko = terminal.getSkladowiska().get(numer);
            for (int i = 0; i < aktualneSkladowisko.getRzedy(); i++)
            {
                for (int j = 0; j < aktualneSkladowisko.getKolumny(); j++)
                {
                    pole = aktualneSkladowisko.getPole(j + 1, i + 1);
                    boolean wolne = !pole.getZawartoscPola().isPelne();
                    boolean brakPropozycji = !propozycja.czyMiejsceZajete(pole.getZawartoscPola().getPierwszaWolnaWarstwa());
                    if (wolne && brakPropozycji)
                    {
                        Przydzial przydzial = new Przydzial(pole.getZawartoscPola().getPierwszaWolnaWarstwa(), k);
                        pole.getZawartoscPola().rezerwujPierwszaWolna();
                        propozycja.addPrzydzial(przydzial);
                        return true;
                    }
                }
            }
         
        }
        return false;
    }

    private void pobierzNastepneSkladowisko()
    {
        numer++;
        this.aktualneSkladowisko = terminal.getSkladowiska().get(numer);
    }

    @Override
    public String toString()
    {
        return "Analityk przydzielający pierwsze puste miejsce na składowisku";
    }

    @Override
    public void clear()
    {
        super.clear();
        numer = 0;
    }
}
